package com.xuecheng.media.service;

import com.xuecheng.base.model.PageParams;
import com.xuecheng.base.model.PageResult;
import com.xuecheng.base.model.RestResponse;
import com.xuecheng.media.model.dto.QueryMediaParamsDto;
import com.xuecheng.media.model.dto.UploadFileParamsDto;
import com.xuecheng.media.model.dto.UploadFileResultDto;
import com.xuecheng.media.model.po.MediaFiles;

import java.io.File;

/**
 * @author Mr.M
 * @version 1.0
 * @description 媒资文件管理业务类
 * @date 2022/9/10 8:55
 */
public interface MediaFileService {

    /**
     * @param pageParams          分页参数
     * @param queryMediaParamsDto 查询条件
     * @return com.xuecheng.base.model.PageResult<com.xuecheng.media.model.po.MediaFiles>
     * @description 媒资文件查询方法
     * @author Mr.M
     * @date 2022/9/10 8:57
     */
    public PageResult<MediaFiles> queryMediaFiels(Long companyId, PageParams pageParams, QueryMediaParamsDto queryMediaParamsDto);

    /**
     * 上传文件
     *
     * @param companyId
     * @param uploadFileParamsDto
     * @param localFilePath
     * @param objectName
     * @return
     */
    UploadFileResultDto upload(Long companyId, UploadFileParamsDto uploadFileParamsDto, String localFilePath, String objectName);

    /**
     * 目的是为了让代理对象调用
     * @param uploadFileParamsDto
     * @param companyId
     * @param bucket
     * @param md5Str
     * @param objectName
     * @return
     */
    MediaFiles AddMediaFileInfo(UploadFileParamsDto uploadFileParamsDto, Long companyId, String bucket, String md5Str, String objectName);

    /**
     * 检查文件是否已经存在
     *
     * @param fileMd5
     * @return
     */
    RestResponse<Boolean> checkfile(String fileMd5);

    /**
     * 检测分块是否存在
     *
     * @param fileMd5
     * @param chunk
     * @return
     */
    RestResponse<Boolean> checkchunk(String fileMd5, int chunk);

    /**
     * 上传分块文件
     *
     * @param fileMd5
     * @param chunk
     * @param localChunkFilePath
     * @return
     */
    RestResponse<Boolean> uploadchunk(String fileMd5, int chunk, String localChunkFilePath);

    /**
     * 合并文件
     *
     * @param companyId
     * @param fileMd5
     * @param chunkTotal
     * @param uploadFileParamsDto
     * @return
     */
    RestResponse<Boolean> mergechunks(Long companyId, String fileMd5, int chunkTotal, UploadFileParamsDto uploadFileParamsDto);

    /**
     * 从minio下载文件到本地
     *
     * @param bucket
     * @param objectName
     * @return
     */
    public File downloadFileFromMinIO(String bucket, String objectName);

    /**
     * 上传文件到minio
     *
     * @param bucket
     * @param localFilePath
     * @param mimeType
     * @param objectName
     * @return
     */
    public boolean addMediaFilesToMinIO(String bucket, String localFilePath, String mimeType, String objectName);

    /**
     * 根据id查询媒资文件信息
     *
     * @param mediaId
     * @return
     */
    MediaFiles getFileById(String mediaId);
}
